import { Observable } from 'rxjs';
import { EzForm } from '../ez-form';
import { EzFormControlConfiguration, EzFormControlEventFn } from '../ez-form-control';
import { EzFormGroup } from '../ez-form-group';
import { EzSelect } from './ez-select';

/**
 * 下拉可选项
 */
export interface EzSelectOption {
  /**
   * 展示文字
   */
  label: string;
  /**
   * 值
   */
  value: any;
  /**
   * 是否禁用
   */
  disabled?: boolean;
}

export declare type EzSelectOptions = EzSelectOption[];

/**
 * 下拉选择器配置项
 */
export interface EzSelectConfiguration extends EzFormControlConfiguration<any, EzSelect> {
  type: 'select';

  /**
   * 可选列表项配置
   */
  options: EzSelectOptions | ((control: EzSelect, group: EzFormGroup, form: EzForm) => Observable<EzSelectOptions>);

  /**
   * 最大可选择数量（`multiple` 有效）
   */
  maxSelectCount?: number;

  /**
   * 是否展示清空按钮
   */
  clearable?: boolean;

  /**
   * 是否多选
   */
  multiple?: boolean;

  /**
   * 失去焦点事件
   */
  onBlur?: EzFormControlEventFn<EzSelect>;

  /**
   * 获取焦点事件
   */
  onFocus?: EzFormControlEventFn;
}
